﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Sinacor.Infra.UI.Common;
using Sinacor.Infra.UI.Controls.SmartClient;
using Sinacor.UI.Bovespa.ManutencaoOrdens.Presenter;
using System.Windows.Controls;
using System.Windows;

namespace Sinacor.UI.Bovespa.ManutencaoOrdens.View.SmartClient
{
    public partial class ManutencaoOrdens : SinacorWindow, IManutencaoOrdens
    {
        #region Event Handlers

        private void DtgJustificativasHistorico_UndidAll(object sender, ItemsEventArgs e)
        {
            DesfazerJustificativa(e);   
        }

        private void DtgJustificativasHistorico_Undid(object sender, ItemsEventArgs e)
        {
            DesfazerJustificativa(e);
        }

        private void CboJustificativasHistorico_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            if (CboJustificativasHistorico.SelectedItem != null)
            {
                TxtJustificativasHistorico.Text = (CboJustificativasHistorico.SelectedItem as Model.Mensagem).Descricao;

                if (TxtJustificativasHistorico.Text.Length > TxtJustificativasHistorico.MaxLength)
                {
                    TxtJustificativasHistorico.Text = TxtJustificativasHistorico.Text.Substring(0, TxtJustificativasHistorico.MaxLength);
                }
            }
        }

        private void CboJustificativasRecente_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            if (CboJustificativasRecente.SelectedItem != null)
            {
                TxtJustificativasRecente.Text = (CboJustificativasRecente.SelectedItem as Model.Mensagem).Descricao;

                if (TxtJustificativasRecente.Text.Length > TxtJustificativasRecente.MaxLength)
                {
                    TxtJustificativasRecente.Text = TxtJustificativasRecente.Text.Substring(0, TxtJustificativasRecente.MaxLength);
                }
            }
        }

        private void BtnSalvarJustificativaRecente_Click(object sender, RoutedEventArgs e)
        {
            SalvarJustificativaRecente();
        }

        private void btnSalvarJustificativaHistorico_Click(object sender, RoutedEventArgs e)
        {
            SalvarJustificativaHistorico();
        }

        private void DtgJustificativasRecente_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            HabilitarEdicaoJustificativaRecente();
        }

        private void DtgJustificativasHistorico_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            HabilitarEdicaoJustificativaHistorico();
        }

        #endregion

        #region Métodos

        private void SalvarJustificativaRecente()
        {
            if (!String.IsNullOrEmpty(TxtJustificativasRecente.Text)
                && !String.IsNullOrEmpty(TxtJustificativasRecente.Text.Trim()))
            {
                foreach (Model.Justificativa justificativa in DtgJustificativasRecente.SelectedItems)
                {
                    justificativa.JustificativaOrdem = TxtJustificativasRecente.Text;
                }

                CboJustificativasRecente.SelectedIndex = -1;
                TxtJustificativasRecente.Text = null;
                DtgJustificativasRecente.UpdateTarget(SinacorDataGrid.ItemsSourceProperty);
            }
        }

        private void SalvarJustificativaHistorico()
        {
            int index;
            Model.Justificativa justificativa;
            ModelCollection<Model.Justificativa> justificativasSelecionadas;

            if (!String.IsNullOrEmpty(TxtJustificativasHistorico.Text)
                && !String.IsNullOrEmpty(TxtJustificativasHistorico.Text.Trim()))
            {
                //Salva numa variável pois a combinação de tentar percorrer o SelectedItems do grid
                //e alterar a ModelCollection com o método de clone faz o grid se perder
                //e deixar apenas uma linha selecionada e o SelectedItems com count no valor 1
                justificativasSelecionadas = new ModelCollection<Model.Justificativa>(DtgJustificativasHistorico.SelectedItems);

                for (int i = 0; i < justificativasSelecionadas.Count; i++)
                {
                    index = PresenterManutencaoOrdens.JustificativasHistorico.IndexOf((Model.Justificativa)justificativasSelecionadas[i]);
                    PresenterManutencaoOrdens.JustificativasHistorico[index] = (Model.Justificativa)Infra.Common.Serialization.CloneHelper.Clone(justificativasSelecionadas[i]);

                    justificativa = PresenterManutencaoOrdens.JustificativasHistorico[index];

                    justificativa.JustificativaOrdem = String.Concat(justificativa.JustificativaOrdem, "||", TxtJustificativasHistorico.Text);

                    if (justificativa.JustificativaOrdem.Length > TxtJustificativasHistorico.MaxLength)
                    {
                        justificativa.JustificativaOrdem = justificativa.JustificativaOrdem.Substring(0, TxtJustificativasHistorico.MaxLength);
                    }

                    DtgJustificativasHistorico.SelectedItems.Add(justificativa);
                }

                CboJustificativasHistorico.SelectedIndex = -1;
                TxtJustificativasHistorico.Text = null;
                DtgJustificativasHistorico.UpdateTarget(SinacorDataGrid.ItemsSourceProperty);
            }
        }

        private void DesfazerJustificativa(ItemsEventArgs e)
        {
            ShowUserWaitingProcess();

            for (int i = 0; i < e.ItemsInfo.Count; i++)
            {
                PresenterManutencaoOrdens.DesfazerJustificativa((Model.Justificativa)e.ItemsInfo[i].Item);
            }

            HideUserWaitingProcess();
        }

        private void HabilitarEdicaoJustificativaRecente()
        {
            if (DtgJustificativasRecente.SelectedItems != null
               && DtgJustificativasRecente.SelectedItems.Count > 0)
            {
                CboJustificativasRecente.IsEnabled = true;
                TxtJustificativasRecente.IsEnabled = true;
            }
            else
            {
                CboJustificativasRecente.IsEnabled = false;
                TxtJustificativasRecente.IsEnabled = false;
            }
        }

        private bool HabilitarAlteracaoJustificativaHistorico(Model.Justificativa justificativa)
        {
            bool retorno = false;

            foreach (Model.Justificativa justificativaComparar in PresenterManutencaoOrdens.JustificativasRecente)
            {
                if (justificativa.DataOrdem == justificativaComparar.DataOrdem
                   && justificativa.NumeroOrdem == justificativaComparar.NumeroOrdem
                   && justificativa.NumeroSubSequenciaOrdem == justificativaComparar.NumeroSubSequenciaOrdem)
                {
                    retorno = true;
                    break;
                }
            }

            return retorno;
        }

        private void HabilitarEdicaoJustificativaHistorico()
        {
            bool bloquearAlteracao = false;

            if (DtgJustificativasHistorico.SelectedItems != null
               && DtgJustificativasHistorico.SelectedItems.Count > 0)
            {
                foreach (Model.Justificativa justificativa in DtgJustificativasHistorico.SelectedItems)
                {
                    if (HabilitarAlteracaoJustificativaHistorico(justificativa))
                    {
                        bloquearAlteracao = true;
                        break;
                    }
                }

                if (bloquearAlteracao)
                {
                    CboJustificativasHistorico.IsEnabled = false;
                    TxtJustificativasHistorico.IsEnabled = false;
                }
                else
                {
                    CboJustificativasHistorico.IsEnabled = true;
                    TxtJustificativasHistorico.IsEnabled = true;
                }
            }
            else
            {
                CboJustificativasHistorico.IsEnabled = false;
                TxtJustificativasHistorico.IsEnabled = false;
            }
        }

        #endregion
    }
}
